package com.jdbc;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp2.BasicDataSource;
import org.junit.Test;

/**
 * DBCP连接池
 * 依赖jar包
 * 1.commons-dbcp2-2.1.1.jar
 * 2.commons-pool2-2.4.2.jar
 * @author lovemanai
 *
 */
public class TestDbcpConnctionPool {
	
	
	@Test
	public void test1() {
		/*
		 * 1.创建链接池对象
		 * 2.配置四大参数
		 * 3.配置连接池参数
		 * 4.得到连接对象
		 */
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/testdatabase");
		dataSource.setUsername("root");
		dataSource.setPassword("root");
		
		dataSource.setMaxWaitMillis(1000);//设置最大连接数
		//....设置连接池参数
		Connection conn = null;
		WrapConnection conn1 = null;
		try {
			 /*
			  * 连接池内部使用四大参数创建Connection对象，即底层依然使用mysql驱动提供的Connection
			  * 连接池对mysql的Connection对象进行了装饰，支队close()方法进行了增强
			  * 调用增强后的close()方法将连接归还连接池
			  */
			conn = dataSource.getConnection();
			conn1 = new WrapConnection(conn);
			//org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper
			System.out.println(conn.getClass().getName()); 
			System.out.println(conn1.getClass().getName());
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				conn1.close();//归还连接给连接池
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}
}
